package com.open.api.wechat.app.request.condition;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author : zhaoxuan
 * @date : 2021/7/5 9:49
 * @description : WeChatServiceMessageCondition
 * @version: 1.0
 */
@Data
@Builder
public class WeChatServiceMessageCondition {

    /**
     * 用户的 OpenID
     */
    @JsonProperty("touser")
    private String toUser;
    /**
     * 消息类型
     */
    @JsonProperty("msgtype")
    private String msgType;
    /**
     * 文本消息，msgtype="text" 时必填
     */
    private MsgText text;
    /**
     * 图片消息，msgtype="image" 时必填
     */
    private MsgImage image;
    /**
     * 图文链接，msgtype="link" 时必填
     */
    private MsgLink link;
    /**
     * 小程序卡片，msgtype="miniprogrampage" 时必填
     */
    @JsonProperty("miniprogrampage")
    private MsgMiniProgramPage miniProgramPage;

    public void setMsgType(MsgType msgType) {
        this.msgType = msgType.name;
    }

    public void setMsgText(String content) {
        MsgText msgTest = MsgText.builder().content(content).build();
        this.text = msgTest;
    }

    public void setMsgImage(String mediaId) {
        MsgImage msgImage = MsgImage.builder().mediaId(mediaId).build();
        this.image = msgImage;
    }

    public void setMsgLink(String title, String description, String url, String thumbUrl) {
        MsgLink msgLink = MsgLink.builder().title(title).description(description).url(url).thumbUrl(thumbUrl).build();
        this.link = msgLink;
    }

    public void setMsgMiniProgramPage(String title, String pagePath, String thumbMediaId) {
        MsgMiniProgramPage msgMiniProgramPage = MsgMiniProgramPage.builder().title(title).pagePath(pagePath).thumbMediaId(thumbMediaId).build();
        this.miniProgramPage = msgMiniProgramPage;
    }

    public enum MsgType{
        TEXT("test"),
        IMAGE("image"),
        LINK("link"),
        MINI_PROGRAM_PAGE("miniprogrampage"),
        ;

        final String name;

        MsgType(String name){
            this.name = name;
        }
    }

    @Data
    @Builder
    public static class MsgText {
        /**
         * 文本消息内容
         */
        private String content;
    }
    @Data
    @Builder
    public static class MsgImage{
        /**
         * 发送的图片的媒体ID，通过 新增素材接口 上传图片文件获得。
         */
        @JsonProperty("media_id")
        private String mediaId;
    }
    @Data
    @Builder
    public static class MsgLink{
        /**
         * 消息标题
         */
        private String title;
        /**
         * 图文链接消息
         */
        private String description;
        /**
         * 图文链接消息被点击后跳转的链接
         */
        private String url;
        /**
         * 图文链接消息的图片链接，支持 JPG、PNG 格式，较好的效果为大图 640 X 320，小图 80 X 80
         */
        @JsonProperty("thumb_url")
        private String thumbUrl;
    }
    @Data
    @Builder
    public static class MsgMiniProgramPage{
        /**
         * 消息标题
         */
        private String title;
        /**
         * 小程序的页面路径，跟app.json对齐，支持参数，比如pages/index/index?foo=bar
         */
        @JsonProperty("pagepath")
        private String pagePath;
        /**
         * 小程序消息卡片的封面， image 类型的 media_id，通过 新增素材接口 上传图片文件获得，建议大小为 520*416
         */
        @JsonProperty("thumb_media_id")
        private String thumbMediaId;
    }
}
